// lib/providers/auth_provider.dart
import 'package:app_router_demo/services/api_response.dart';
import 'package:app_router_demo/services/http_service.dart';
import 'package:flutter/foundation.dart';
import 'package:google_sign_in/google_sign_in.dart'; // 导入 Google 登录库

class AuthProvider with ChangeNotifier {
  bool _isChecked = false; // 是否已同意协议
  bool get isChecked => _isChecked;

  bool _isLoggedIn = false; // 是否已登录
  bool get isLoggedIn => _isLoggedIn;

  // 获取 HttpService 的单例实例
  final HttpService _httpService = HttpService();

  void setIsChecked(bool value) {
    if (_isChecked != value) {
      _isChecked = value;
      debugPrint('AuthProvider: isChecked 状态更新为 $_isChecked');
      notifyListeners();
    }
  }

  // ============== 模拟手机号和验证码登录相关方法 ==============

  /// 模拟发送手机验证码
  /// 返回 true 表示发送成功，false 表示失败
  Future<bool> sendVerificationCode(
    String phoneNumber,
    String countryCode,
  ) async {
    debugPrint('AuthProvider: 尝试发送验证码到手机号: $phoneNumber');
    final response = await _httpService.post<Map<String, dynamic>>(
      '/api/v1/common/send_check_code_sms', // API 路径
      data: {
        'mobile': phoneNumber,
        'mobileCountryCode': countryCode, // 假设验证码类型是 'login'
      },
      fromJson: (dynamic data) => data as Map<String, dynamic>,
    );

    print('AuthProvider: 验证码发送响应: ${response.data}');
    if (response.code == 200) {
      debugPrint('AuthProvider: 验证码发送成功到 $phoneNumber');
      return true;
    } else {
      debugPrint('AuthProvider: 验证码发送失败: ${response.message}');
      // 可以在这里显示错误信息给用户，例如使用 Flutter toast 或 SnackBar
      return false;
    }
  }

  /// 模拟验证手机验证码
  /// 返回 true 表示验证成功，false 表示失败
  Future<bool> appLogin(
    String phoneNumber,
    String code,
    String mobileCountryCode,
    String loginType,
  ) async {
    debugPrint('AuthProvider: 尝试验证手机号: $phoneNumber, 验证码: $code');
    // await Future.delayed(const Duration(seconds: 2)); // 模拟网络延迟
    // // 实际应用中，这里会调用后端API验证验证码
    // if (code == '1234' && phoneNumber.length >= 11) {
    //   // 假设验证码为 '1234'
    //   _isLoggedIn = true; // 验证码正确则视为登录成功
    //   debugPrint('AuthProvider: 验证码验证成功! isLoggedIn = $_isLoggedIn');
    //   notifyListeners();
    //   return true;
    // } else {
    //   _isLoggedIn = false;
    //   debugPrint('AuthProvider: 验证码验证失败!');
    //   notifyListeners();
    //   return false;
    // }
    final response = await _httpService.post<Map<String, dynamic>>(
      '/api/v2/login', // API 路径
      data: {
        'mobile': phoneNumber,
        'mobileCountryCode': mobileCountryCode, // 假设验证码类型是 'login'
        'loginType': loginType,
        'mobileCheckCode': code,
      },
      fromJson: (dynamic data) => data as Map<String, dynamic>,
    );

    print('AuthProvider: 验证码发送响应: ${response.data}');
    if (response.code == 200) {
      debugPrint('AuthProvider: 验证码发送成功到 $phoneNumber');
      return true;
    } else {
      debugPrint('AuthProvider: 验证码发送失败: ${response.message}');
      // 可以在这里显示错误信息给用户，例如使用 Flutter toast 或 SnackBar
      return false;
    }
  }

  // ============== 第三方登录相关方法 ==============

  final GoogleSignIn _googleSignIn = GoogleSignIn();

  /// 模拟 Google 登录
  Future<bool> signInWithGoogle() async {
    debugPrint('AuthProvider: 尝试 Google 登录...');
    try {
      final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();

      if (googleUser == null) {
        // 用户取消登录
        debugPrint('Google 登录被用户取消');
        _isLoggedIn = false;
        notifyListeners();
        return false;
      }

      final GoogleSignInAuthentication googleAuth =
          await googleUser.authentication;
      debugPrint('Google 用户信息: ${googleUser.displayName}, ${googleUser.email}');
      debugPrint('Google Auth Token: ${googleAuth.accessToken}');
      // 实际应用中，你会将 googleAuth.idToken 发送到你的后端进行验证和注册/登录
      // 如果后端验证成功，则设置 _isLoggedIn = true;

      await Future.delayed(const Duration(seconds: 1)); // 模拟后端验证延迟
      _isLoggedIn = true; // 模拟登录成功
      debugPrint('AuthProvider: Google 登录成功! isLoggedIn = $_isLoggedIn');
      notifyListeners();
      return true;
    } catch (e) {
      debugPrint('Google 登录失败: $e');
      _isLoggedIn = false;
      notifyListeners();
      return false;
    }
  }

  // ============== 传统用户名密码登录方法 (保留，但当前流程未使用) ==============
  Future<bool> login({
    required String username,
    required String password,
  }) async {
    debugPrint('AuthProvider: 尝试传统登录... 用户名: $username, 密码: $password');
    await Future.delayed(const Duration(seconds: 2)); // 模拟网络延迟
    if (username == 'test' && password == '123456') {
      _isLoggedIn = true;
      debugPrint('AuthProvider: 传统登录成功! isLoggedIn = $_isLoggedIn');
      notifyListeners();
      return true;
    } else {
      _isLoggedIn = false;
      debugPrint('AuthProvider: 传统登录失败!');
      notifyListeners();
      return false;
    }
  }

  void logout() {
    _isLoggedIn = false;
    _isChecked = false; // 重置 isChecked 状态，如果登出后需要重新同意协议
    debugPrint(
      'AuthProvider: 用户登出! isLoggedIn = $_isLoggedIn, isChecked = $_isChecked',
    );
    notifyListeners();
    // 如果是 Google 登录，登出时也需要调用 GoogleSignIn.signOut()
    _googleSignIn.signOut();
  }
}
